package com.suitsoft.ut.commons;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Lists;
import com.suitsoft.ut.service.ServiceException;
import com.suitsoft.ut.util.StringUtils;

public class Constants {
	/** 日志输出对象 */
	protected final Logger logger = LoggerFactory.getLogger(getClass());
	
	/** 分页每页默认条数 */
	public static final int PAGE_SIZE = 50;
	/** 应用程序系统参数类实例. */
	public static final String SP = "sp";
	/** 存在项目的绝对路径，方便传给线程类. */
	public static String path;
	/** 存在项目的绝对路径，方便传给线程类. */
	public static String path1;
	/** 项目SWF临时文件夹 */
	public static String SWF_TEMP_PATH = "temp/";
	/** 项目PDF临时文件夹 */
	public static String PDF_TEMP_PATH = "WEB-INF/temp/";
	/** 定时删除临时文件时间 */
	public static int INTERVAL = 1;
	
	/** 新建用户时默认密码 */
	public static final String DEFALT_PASSWORD = "123";
	
	//导出
	/** 任务书的word模板 */
	public static final String EXP_TEMPLATE_TASK = "exp/template/task.doc";
	/** 任务书的内容模板 */
	public static final String EXP_TEMPLATE_TASK_CONTENT = "exp/template/task-content";
	
	/** 开题报告word模板 */
	public static final String EXP_TEMPLATE_WORD_OPEN_REPORT = "exp/template/open-report.doc";
	/** 开题报告的内容模板 */
	public static final String EXP_TEMPLATE_WORD_OPEN_REPORT_CONTENT = "exp/template/open-report-content";
	
	/** 情况表word模板 */
	public static final String EXP_TEMPLATE_WORD_QINGKUANG = "exp/template/qingkuang.doc";
	/** 情况表的内容模板 */
	public static final String EXP_TEMPLATE_WORD_QINGKUANG_CONTENT = "exp/template/qingkuang-content";
	
	
	/** 分组类型 -  立题 */
	public static Integer TEAM_TYPE_LITI = 1;
	/** 分组类型 - 审题 */
	public static Integer TEAM_TYPE_SHENTI = 2;
	/** 分组类型 - 答辩 */
	public static Integer TEAM_TYPE_DABIAN = 3;
	/*** 分组类型 - 中期答辩 */
	public static Integer TEAM_TYPE_MIDDLE = 4;
	/** 特殊符号用在角色管理列表中.角色名中带此符号的，将不能编辑 */
	public static final String ROLE_NOT_EDIT_SIGLE = "~#@";
	//################中文 开始##################
	/** 立题 */
	public static final String CN_LITI = "立 题";
	/** 开题 */
	public static final String CN_KAITI = "开 题";
	/** 中期 */
	public static final String CN_MIDDLE = "中 期";
	/** 答辩  */
	public static final String CN_DABIAN = "答 辩";
	/** 时间控制  */
	public static final String CN_TIME_CONTROL = "时间控制";
	/** 团队负责人 - 立题 */
	public static final String CN_TIME_MASTER_LITI = "团队负责人-立题";
	/** 团队负责人 -  开题*/
	public static final String CN_TIME_MASTER_KAITI = "团队负责人-开题";
	/** 团队负责人 - 中期 */
	public static final String CN_TIME_MASTER_MIDLLE = "团队负责人-中期";
	/** 团队负责人 - 答辩 */
	public static final String CN_TIME_MASTER_DABIAN = "团队负责人-答辩";
	/** 学校管理员 */
	public static final String CN_SCHOOL_ADMIN = "学校管理员";
	/** 学院管理员 */
	public static final String CN_COLLEGE_ADMIN = "学院管理员";
	/** 可登陆用户 */
	public static final String CN_ABLE_LOGIN_USER = "可登陆用户";
	/** 学生 */
	public static final String CN_STUDENT = "学生";
	/** 教师 */
	public static final String CN_TEACHER = "指导教师";
	/** 时间角色  */
	public static final String CN_TIME_ROLE = "时间角色";
	//##################中文  结束###################
	
	/** 时间控制  - 生效 */
	public static final int TIME_CONTROL_EFFECTIVE = 1;
	/** 时间控制  - 未生效 */
	public static final int TIME_CONTROL_NOT_EFFECTIVE = 0;
	/** 是否 团队负责人  - 是*/
	public static final Integer IS_MASTER_YES = 1;
	/** 是否  团队负责人 - 否*/
	public static final Integer IS_MASTER_NO = 0;
	/** 流程类型 - 立题*/
	public static final Long THESIS_FLAG_LITI = 1L;
	/** 流程类别 - 选题 */
	public static final Long THESIS_FLAG_XUANTI = 2L;
	/** 流程类别 - 开题 */
	public static final Long THESIS_FLAG_KAITI = 3L;
	/** 流程类型 - 中期 */
	public static final Long THESIS_FLAG_MIDLLE = 4L;
	/** 流程类别  - 答辩*/
	public static final Long THESIS_FLAG_DABIAN = 5L;
	/** 流程状态 - 立题管理 */
	public static final Long THSIS_STAUTS_LITI_MANAGER = 11L;
	/** 流程状态 - 退回 - 立题管理 */
	public static final Long THSIS_STAUTS_LITI_BACK_MANAGER = -11L;
	/** 流程状态 - 立题 - 评阅 */
	public static final Long THSIS_STAUTS_LITI_FIRST_AUDIT = 12L;
	/** 流程状态 - 立题 - 退回 - 评阅 */
	public static final Long THSIS_STAUTS_LITI_BACK_FIRST_AUDIT = -12L;
	/** 流程状态 - 立题 - 团队审核 */
	public static final Long THSIS_STAUTS_LITI_SECOND_AUDIT = 13L;
	/** 流程状态 - 立题 - 退回 - 团队审核 */
	public static final Long THSIS_STAUTS_LITI_BACK_SECOND_AUDIT = -13L;
	/** 流程状态 - 立题 - 专家审核 */
	public static final Long THSIS_STAUTS_LITI_THIRD_AUDIT = 14L;
	/** 流程状态 - 立题 - 基层审核 */
	public static final Long THSIS_STAUTS_LITI_FIRTHE_AUDIT = 15L;
	/** 流程状态 - 选题管理 */
	public static final Long THSIS_STAUTS_SELECT_MANAGER = 21L;
	/** 流程状态 - 选题 */
	public static final Long THSIS_STAUTS_SELECT_SELECT = 22L;
	/** 流程状态 - 选题审核 */
	public static final Long THSIS_STAUTS_SELECT_AUDIT = 23L;
	/** 流程状态 - 开题下任务书 */
	public static final Long THSIS_STAUTS_KAITI_TASK = 31L;
	/** 流程状态 - 开题下任务书 */
	public static final Long THSIS_STAUTS_KAITI_BACK_TASK = -31L;
	/** 流程状态 - 开题团队负责人审核 */
	public static final Long THSIS_STAUTS_KAITI_GROUP_AUDIT = 32L;
	/** 流程状态 - 开题基层负责人审核 */
	public static final Long THSIS_STAUTS_KAITI_BASE_AUDIT = 33L;
	/** 流程状态 - 开题 准备开题情况报告 */
	public static final Long THSIS_STAUTS_KAITI_READY_REPORT = 34L;
	/** 流程状态 - 开题 添写开题情况报告 */
	public static final Long THSIS_STAUTS_KAITI_WRITE_REPORT = 35L;
	/** 流程状态 - 开题 退回 - 添写开题情况报告 */
	public static final Long THSIS_STAUTS_KAITI_BACK_WRITE_REPORT = -35L;
	/** 流程状态 - 开题指导教师审核情况报告 */
	public static final Long THSIS_STAUTS_KAITI_ZHIDAO_TEACHER_AUDIT_REPORT = 36L;
	/** 流程状态 - 开题 退回 指导教师审核情况报告 */
	public static final Long THSIS_STAUTS_KAITI_BACK_ZHIDAO_TEACHER_AUDIT_REPORT = -36L;
	/** 流程状态 - 团队审核 开题报告 */
	public static final Long THSIS_STAUTS_KAITI_GROPU_AUDIT_REPORT = 37L;
	/** 流程状态 - 团队 退回 - 审核 开题报告 */
	public static final Long THSIS_STAUTS_KAITI_BACK_GROPU_AUDIT_REPORT =- 37L;
	/** 流程状态 - 开题基层负责人审核开题报告 */
	public static final Long THSIS_STAUTS_KAITI_BASE_AUDIT_REPORT = 38L;
	/** 流程状态 - 中期 - 周记*/
	public static final Long THSIS_STAUTS_MIDLLE_WEEK_REPORT = 41L;
	/** 流程状态 - 中期 - 评阅周记*/
	public static final Long THSIS_STAUTS_MIDLLE_READ_WEEK_REPORT = 42L;
	/** 流程状态 - 中期 - 学生自查表*/
	public static final Long THSIS_STAUTS_MIDLLE_UP_STUDENT_SEFT_REPORT = 43L;
	/** 流程状态 - 中期 - 评阅学生自查表*/
	public static final Long THSIS_STAUTS_MIDLLE_READ_STUDENT_SEFT_REPORT = 44L;
	/** 流程状态 - 中期 - 退回  - 评阅学生自查表 */
	public static final Long THSIS_STAUTS_MIDLLE_BACK_READ_STUDENT_SEFT_REPORT = -44L;
	/** 流程状态 - 中期 - 教师提交自查表*/
	public static final Long THSIS_STAUTS_MIDLLE_UP_TEACHER_SEFT_REPORT = 45L;
	/** 流程状态 - 中期 - 评阅教师自查表*/
	public static final Long THSIS_STAUTS_MIDLLE_READ_TEACHER_SEFT_REPORT = 46L;
	/** 流程状态 - 中期 - 退回  - 评阅教师自查表*/
	public static final Long THSIS_STAUTS_MIDLLE_BACK_READ_TEACHER_SEFT_REPORT = -46L;
	/** 流程状态 - 中期 - 答辩*/
	public static final Long THSIS_STAUTS_MIDLLE_DABIAN = 47L;
	/** 流程状态 - 答辩- 答辩论文及答辩PPT上传*/
	public static final Long THSIS_STAUTS_DABIAN_DABIAN_AND_UP_PPT = 51L;
	/** 流程状态 - 答辩- 退回  - 答辩论文及答辩PPT上传*/
	public static final Long THSIS_STAUTS_BACK_DABIAN_DABIAN_AND_UP_PPT = -51L;
	/** 流程状态 - 答辩- 指导教师评阅论文及成绩*/
	public static final Long THSIS_STAUTS_DABIAN_TEACHER_READ_THESIS_AND_FRACTION = 52L;
	/** 流程状态 - 答辩- 评阅教师评阅论文并评分*/
	public static final Long THSIS_STAUTS_DABIAN_PINGYUE_TEACHER_READ_THESIS_AND_FRACTON = 53L;
	/** 流程状态 - 答辩- 现场答辩并评分*/
	public static final Long THSIS_STAUTS_DABIAN_XIANCHANGG_DABIAN_AND_FRACTION = 54L;
	/** 流程状态 - 答辩- 论文成绩评定表*/
	public static final Long THSIS_STAUTS_DABIAN_MAKE_FRACTION_TABLE = 55L;
	/** 流程状态 - 答辩- 毕业论文归档*/
	public static final Long THSIS_STAUTS_DABIAN_GUIDANG = 56L;
	
	/** 系统参数类别代码 - 科题来源 */
	public static final String SYSTEM_CATEGORY_PK_KETI_SOURCE = "KETI_SOURCE";
	/** 系统参数类别代码 - 理工类 */
	public static final String SYSTEM_CATEGORY_PK_LI_GONG_TYPE = "LI_GONG_TYPE";
	/** 系统参数类别代码 - 文管类 */
	public static final String SYSTEM_CATEGORY_PK_WEN_GUAN_TYPE = "WEN_GUAN_TYPE";
	/** 系统参数类别代码 - 中期答辩评分依据 */
	public static final String SYSTEM_CATEGORY_PK_MIDDLE_PINGFENYIJU = "MIDLLE_PINGFENYIJU";
	/** 系统参数类别代码 - 答辩评分依据 */
	public static final String SYSTEM_CATEGORY_PK_DABIAN_PINGFENYIJU = "DABIAN_PINGFENYIJU";
	/** 系统参数类别代码 - 指导教师评分依据 */
	public static final String SYSTEM_CATEGORY_PK_ZHIDAO_PINGFENYIJU = "ZHIDAO_PINGFENYIJU";
	/** 系统参数类别代码 - 评阅教师评分依据 */
	public static final String SYSTEM_CATEGORY_PK_PINGYUE_PINGFENYIJU = "PINGYUE_PINGFENYIJU";
	
	/** 评分类型 1 - 中期答辩评分 */
	public static final Long SCORE_TYPE_MIDDLE = 1L;
	/** 评分类型 2 - 指导教师评分 */
	public static final Long SCORE_TYPE_ZHIDAO = 2L;
	/** 评分类型 3 - 评阅教师评分 */
	public static final Long SCORE_TYPE_PINGYUE = 3L;
	/** 评分类型 4 - 答辩评分 */
	public static final Long SCORE_TYPE_DABIAN = 4L;
	
	//导出用的模拟路径
	/** 导出临时文件夹 */
	public static final String EXP_DETAILT_PATH = "exp/temp/";
	
	
	/**
	 * 从用户信息中的可控制学院IDS字串，转成List<Long>
	 * @param collegeIds
	 * @return
	 */
	public static List<Long> getListIdsByCollegeId(String collegeIds){
		List<Long> ids = Lists.newArrayList();
		if(StringUtils.isEmpty(collegeIds)){
			return ids;
		}
		for(String s : collegeIds.split(",")){
			if(StringUtils.isNumber(s)){
				ids.add(Long.valueOf(s));
			}else{
				throw new ServiceException("学院ID有误！请联系管理员！");
			}
		}
		
		return ids;
	}
	
}
